cmake_minimum_required(VERSION 3.5)

project(terra-grid VERSION 0.1 LANGUAGES CXX)

set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

find_package(QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets)

set(PROJECT_SOURCES
        main.cpp
        mainwindow.cpp
        mainwindow.h
        mainwindow.ui
)

if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)
    qt_add_executable(terra-grid
        MANUAL_FINALIZATION
        ${PROJECT_SOURCES}
        map/mapview.h map/mapview.cpp
        map/mapinfo.h
        map/maploaddialog.h map/maploaddialog.cpp map/maploaddialog.ui
        canvas.h canvas.cpp
        map/infoview.h map/infoview.cpp
        terraria/terramodel.h terraria/terramodel.cpp
        terraria/terraview.h terraria/terraview.cpp
        terraria/terrabrush.h terraria/terrabrush.cpp
    )
else()
    add_executable(terra-grid
        ${PROJECT_SOURCES}
    )
endif()

target_link_libraries(terra-grid PRIVATE Qt${QT_VERSION_MAJOR}::Widgets)

# 增加对子模块的依赖
target_include_directories(terra-grid PRIVATE
    "${CMAKE_SOURCE_DIR}/external/paramo/"
    "${CMAKE_SOURCE_DIR}/external/skip-grid/"
    "${CMAKE_SOURCE_DIR}/external/sync-layer/"
    "${CMAKE_SOURCE_DIR}/external/transformable/")

target_link_libraries(terra-grid PRIVATE "${CMAKE_SOURCE_DIR}/external/paramo/pre-built/mingw1120_64/libParamo.a")

# 增加对OpenMP的依赖
find_package(OpenMP REQUIRED)

if(OpenMP_CXX_FOUND)
    target_link_libraries(terra-grid PUBLIC OpenMP::OpenMP_CXX)
endif()

# Qt for iOS sets MACOSX_BUNDLE_GUI_IDENTIFIER automatically since Qt 6.1.
# If you are developing for iOS or macOS you should consider setting an
# explicit, fixed bundle identifier manually though.
if(${QT_VERSION} VERSION_LESS 6.1.0)
  set(BUNDLE_ID_OPTION MACOSX_BUNDLE_GUI_IDENTIFIER com.example.terra-grid)
endif()
set_target_properties(terra-grid PROPERTIES
    ${BUNDLE_ID_OPTION}
    MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
    MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
    MACOSX_BUNDLE TRUE
    WIN32_EXECUTABLE TRUE
)

include(GNUInstallDirs)
install(TARGETS terra-grid
    BUNDLE DESTINATION .
    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
    RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)

if(QT_VERSION_MAJOR EQUAL 6)
    qt_finalize_executable(terra-grid)
endif()
